package com.app.sgd.controller.action;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.app.sgd.business.facade.DocumentoVinculadoFacade;
import com.app.sgd.manager.SGDDispatchAction;
import com.app.sgd.model.bean.DocumentoVinculado;
import com.app.sgd.model.bean.Usuario;
import com.app.sgd.util.Constants;
import com.app.sgd.util.SessionConstants;
import com.app.sgd.util.Util;
import com.app.sgd.view.actionform.AdministracionDocumentoVinculadoForm;
import com.app.sgd.view.vo.FiltroBusquedaVO;

public class AdministracionDocumentoVinculadoAction extends SGDDispatchAction{
	private static Logger logger = Logger.getLogger(AdministracionDocumentoVinculadoAction.class);
	
	public ActionForward busquedaDocVinculado(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			reset(form,request);
			AdministracionDocumentoVinculadoForm datos = (AdministracionDocumentoVinculadoForm)form;
			
			long fechFin = (new java.util.Date()).getTime();
			long fechIni = fechFin - Constants.FACTOR_FECHA * (Integer.parseInt(Constants.DIAS_MOSTRAR_ULTIMOS_DOCUMENTOS));
			datos.setFechaInicio(Util.getDateAsStr(new java.util.Date(fechIni)));
			datos.setFechaFin(Util.getDateAsStr(new java.util.Date(fechFin)));
			
			String flgRpta = request.getParameter("flgRpta") == null ? Constants.VALOR_DEFAULT_CERO : request.getParameter("flgRpta");
			datos.setFlgRpta(flgRpta);
			
			if(flgRpta.equals(Constants.VALOR_DEFAULT_CERO))
				request.getSession().removeAttribute(SessionConstants.LISTA_DOCUMENTOS_RESPUESTA_MOSTRAR);
			else
				request.getSession().removeAttribute(SessionConstants.LISTA_DOCUMENTOS_VINCULAR_MOSTRAR);
			
			return mapping.findForward("documentosVinculados");
		}catch(Exception e){
			logger.error("[STD]: Error en busquedaDocVinculado "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward buscarDocumento(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionDocumentoVinculadoForm datos = (AdministracionDocumentoVinculadoForm)form;
			datos.setCheckValuesDocumentosRespuesta(new String[0]);
			
			DocumentoVinculadoFacade documentoVinculadoFacade = new DocumentoVinculadoFacade();
			
			FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
			filtroBusquedaVO.setCodTipoDocumento(datos.getCodTipoDocumento());
			filtroBusquedaVO.setNumDocumento(datos.getNumDocumento());
			filtroBusquedaVO.setAsunto(datos.getAsunto());
			filtroBusquedaVO.setNombreDestinatario(datos.getNombreDestinatario());
			filtroBusquedaVO.setFechaInicio(datos.getFechaInicio());
			filtroBusquedaVO.setFechaFin(datos.getFechaFin());
			filtroBusquedaVO.setFlgRpta(datos.getFlgRpta());
			
			Usuario usuario = (Usuario)request.getSession().getAttribute(SessionConstants.SGD_USUARIO_SESION_ACTIVO);
			filtroBusquedaVO.setUsuario(usuario);
			
			ArrayList lstDocumentos = documentoVinculadoFacade.filtrarDocumentosVincular(filtroBusquedaVO);
			
			if(datos.getFlgRpta().equals(Constants.VALOR_DEFAULT_CERO))
				request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_VINCULAR_MOSTRAR, lstDocumentos);
			else
				request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_RESPUESTA_MOSTRAR, lstDocumentos);
			
//			request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_VINCULAR_MOSTRAR, lstDocumentos);
			return mapping.findForward("documentosVinculados");
		}catch(Exception e){
			logger.error("[STD]: Error en buscarDocumento "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward siguiente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		return mapping.findForward("documentosVinculados");
	}

	public ActionForward seleccionarDocumento(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionDocumentoVinculadoForm datos = (AdministracionDocumentoVinculadoForm)form;
			String index = request.getParameter("index");
			
			ArrayList lstDocumentos = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_DOCUMENTOS_VINCULAR_MOSTRAR);
			DocumentoVinculado documento = (DocumentoVinculado) lstDocumentos.get(Integer.parseInt(index));
			
			datos.setFlgSeleccion("1");
			datos.setCodDocumentoSel(documento.getCodDocumento());
			datos.setNumDocumentoSel(documento.getNumDocumento());
			datos.setDescTipoMovimientoSel(documento.getDescTipoMovimiento());
			datos.setAsuntoSel(documento.getAsunto());
			datos.setNombreEmisorSel(documento.getNombreEmisor());
			datos.setNombreDestinoSel(documento.getNombreDestinatario());
			datos.setFechaRecepcionSel(documento.getFechaRecepcion());
			
			return mapping.findForward("documentosVinculados");
		}catch(Exception e){
			logger.error("[STD]: Error en seleccionarDocumento "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward adicionarDocumentosRespuesta(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionDocumentoVinculadoForm datos = (AdministracionDocumentoVinculadoForm)form;
			String[] checkValuesDocumentosRespuesta = datos.getCheckValuesDocumentosRespuesta();
			String indiceDocumentosRespuesta = "|";
			for(int i=0;i<checkValuesDocumentosRespuesta.length;i++){
				indiceDocumentosRespuesta += checkValuesDocumentosRespuesta[i] + "|";
			}
			datos.setIndiceDocumentosRespuesta(indiceDocumentosRespuesta);
			datos.setFlgSeleccion("1");
			
			return mapping.findForward("documentosVinculados");
		}catch(Exception e){
			logger.error("[STD]: Error en seleccionarDocumento "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public void reset(ActionForm form, HttpServletRequest request){
		AdministracionDocumentoVinculadoForm formdoc = (AdministracionDocumentoVinculadoForm)form;
		formdoc.setSeleccionado(new String());
		formdoc.setAsunto(new String());
		formdoc.setCodDocumento(new String());
		formdoc.setCodTipoDocumento(new String());
		formdoc.setCodTipoMovimiento(new String());
		formdoc.setFechaInicio(new String());
		formdoc.setFechaFin(new String());
		formdoc.setNombreDestinatario(new String());
		formdoc.setNombreEmisor(new String());
		formdoc.setNumDocumento(new String());
		
		formdoc.setFlgSeleccion(new String());
		formdoc.setAsuntoSel(new String());
		formdoc.setCodDocumentoSel(new String());
		formdoc.setDescTipoDocumentoSel(new String());
		formdoc.setDescTipoMovimientoSel(new String());
		formdoc.setNumDocumentoSel(new String());
		
		formdoc.setIndiceDocumentosRespuesta(new String());
		formdoc.setCheckValuesDocumentosRespuesta(new String[0]);
	}
}
